perm filename SUBRX.F4[SCR,LCS] blob sn#223768 filedate 1976-07-05 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	C*****  THIS ROUTINE DIVIDES OCTAVE INTO ANY NUMBER OF EQUAL PARTS
C00005 ENDMK
CāŠ—;
C*****  THIS ROUTINE DIVIDES OCTAVE INTO ANY NUMBER OF EQUAL PARTS

	SUBROUTINE SUBR
	COMMON /INS/ INST(27),BG(60)
	COMMON P(30),INUM,IPAR,CNT(27),BT,PL(48),IREST,DF,DUR(27)
C   INUM=INST#  IPAR=PARAM#  
C   BT=BASIC TIME P1 WHEN SUBROUTINE IS CALLED
C   IF IREST IS <0, THAT NOTE WILL BE A REST.  
C   INST=INST. NAME,  BG=INSTS' BEGIN TIMES.
C   NOTE #S IN SUBROUTINE: (1-84)  C4=37  FS4=43  C5=49  ETC.
C   F1=86  F15=100 (NO F16!)

	DIMENSION JINST(4,4),A(4),L(4)
C  WILL ACCEPT 4 INST NAMES FOR EACH OF 4 INSTS( 1,2,3,4)
	IF(IPAR.EQ.30)GO TO 30
C DOES NAME CHANGE ON P30 CALL

C   CALL SUBROUTINE FROM P12. P3 CAN BE NOTES OR NUMBS.
	X=P(3)
	IF(PL(3).EQ.1)GO TO 1
	IF(P(12).EQ.0)X=IFIX(X)
C  FOR RAND NOTES TO PRINT OUT FREQS.
	X=30.8677*2**(X/12)
C  X=FREQ. IN HZ. BASED ON NOTE # IN P3.
	PL(3)=1.
C  THIS CAUSES FREQ. NUM TO PRINT INSTEAD OF LITERAL CHARACTERS.
1	P(3)=X*2**(P(11)/P(12))
C  P12=# OF DIVISIONS OF THE OCTAVE.  P11=CHROMATIC STEP IN THAT DIV.
	RETURN

30	IF(CNT(INUM).NE.1)GO TO 31
C A, L AND INST NAMES ARE INITIIALIZED ON FIRST NOTE OF EACH INST.
	A(INUM)=0
	L(INUM)=1
	JINST(1,INUM)=INST(INUM)
	TYPE 32,INST(INUM)
	DO 33 K=2,4
	J=K-1
	TYPE 34,J
33	ACCEPT 35,JINST(K,INUM)
32	FORMAT(' TYPE 3 ALTERNATE NAMES FOR ',A5)
34	FORMAT(' TYPE #',I1,4X$)
35	FORMAT(A5)
 
31	IF(A(INUM).GT.P(1))L(INUM)=L(INUM)+1
C L CHANGES VALUE IF THERE IS A TIME OVERLAP

	IF(L(INUM).GT.4)L(INUM)=1
C  RESET L IF IT GETS TOO BIG

	A(INUM)=P(1)+P(2)*DF
C  STORES END POINT IN TIME OF CURRENT NOTE.

	INST(INUM)=JINST(L(INUM),INUM)
C  THIS SET INST NAME FOR EVERY NOTE.

	END


C   STEPS  ; TYPICAL INPUT FOR MICROTONE SUBROUTINE.
C   CLAR  /P2 .3/P3 A3/P4 1000;
C   P11 NUM/0/1/2/3/4/5/6/7/8/9/FINE*;
C   P12 9 SUBR/END;  OCTAVE IS DIVIDED INTO 9 PARTS.